﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Data;
using System.Collections;
using Sinacor.UI.Bovespa.Ordens.Presenter;
using Sinacor.Infra.UI.Controls;
using Sinacor.UI.Bovespa.Ordens.Model;
using System.Text;
using System.ComponentModel;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Input;
using System.Text.RegularExpressions;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.Infra.UI.Common;
using PSE.Framework.UI.Resources;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem;
using Sinacor.UI.Bovespa.Ordens.Model.Enum;

namespace Sinacor.UI.Bovespa.Ordens.View.SmartClient
{
    public partial class CadastramentoNegocio : SinacorWindow, ICadastramentoNegocio
    {
        #region Atributos/Propriedades

        public CadastramentoNegocioPresenter _presenter;
        private ModelCadastroNegocio _negocio;
        private ModelCadastroNegocio _menu;
        private Model.Titulo _titulo;
        private Model.Titulo _tituloRecuperado = null;
        private ModoExibicao _modoExibicao;
        private EstadosTela? _estadoTela;
        private int _indexadorNegocio = -1;
        private bool _tituloValidoRecuperado = true;
        private bool _desabilitarRecuperacaoTitulo = false;
        private bool _desabilitarControleNavegacao = false;
        private bool _Verifiquei = false;


        public bool validarModoPesquisa
        { get; set; }

        private List<ModelCadastroNegocio> _listaNegocios;
        public List<ModelCadastroNegocio> ListaNegocios
        {
            get
            {
                if (_listaNegocios == null)
                    _listaNegocios = new List<ModelCadastroNegocio>();

                return _listaNegocios;
            }
            set { _listaNegocios = value; }
        }

        #endregion

        #region Enums
        private enum EstadosTela
        {
            Pesquisa,
            Inclusao,
            Alteracao
        }

        private enum ModoExibicao
        {
            Form,
            Grid
        }
        #endregion

        #region Construtor

        public CadastramentoNegocio()
        {
            this.ModuleId = "ORD";
            this.InitializeComponent();
            this.AfterInitialize += new RoutedEventHandler(CadastramentoNegocio_AfterInitialize);

            this._titulo = new Model.Titulo();
            this._presenter = new CadastramentoNegocioPresenter(this);
            _presenter.ModuleID = base.ModuleId;

            if (this._negocio != null)
            {
                ConfigurarTelaModoAlteracao();
            }
            else
            {
                ConfigurarTelaModoPesquisa();
            }

            validarModoPesquisa = true;
            this.navigatorPadrao.ItemsSource = this.ListaNegocios;
            this.ClearServiceErrors();
        }

        void CadastramentoNegocio_AfterInitialize(object sender, RoutedEventArgs e)
        {
            CarregarDadosIniciais();
        }

        #endregion

        #region Eventos

        #region textCorrespondenteCodigo_LostFocus
        void textCorrespondenteCodigo_LostFocus(object sender, RoutedEventArgs e)
        {
            object[] parm = { e };
            this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new EventHandler(CorrespondenteCodigoValueChanged), sender, parm);
        }
        #endregion

        #region radioLiquidacao_Checked

        void radioLiquidacao_Checked(object sender, RoutedEventArgs e)
        {
            GerarDiasLiquidacao();
        }

        #endregion

        #region Closing



        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            ModelCadastroNegocio modelNegocioItemNavigator = null;
            bool bComparar = false;


            if (this._estadoTela == EstadosTela.Inclusao || this._estadoTela == EstadosTela.Alteracao)
            {

                RecuperarDadosFormulario();

                if (navigatorPadrao.SelectedItem != null)
                {
                    modelNegocioItemNavigator = (ModelCadastroNegocio)navigatorPadrao.SelectedItem;
                    bComparar = true;
                }
                else if (this._negocio != null && this._estadoTela == EstadosTela.Inclusao)
                {
                    modelNegocioItemNavigator = new ModelCadastroNegocio();
                    bComparar = true;
                }

                if (bComparar)
                {
                    if (!this._presenter.CompararNegocios(modelNegocioItemNavigator, this._negocio, false))
                    {
                        SinacorMessageBoxResult result;
                        result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar")), "", SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);
                        if (result == SinacorMessageBoxResult.Yes)
                        {
                            if (!this.Salvar())
                            {
                                e.Cancel = true;
                            }
                        }
                    }
                }
            }


        }

        #endregion

        #region CorrespondenteCodigoValueChanged

        void CorrespondenteCodigoValueChanged(object sender, EventArgs e)
        {
            if (textCorrespondenteCodigo.Value != null && textCorrespondenteCodigo.Value != 0)
            {
                RecuperarCorrespondente();
            }
            else
            {
                textCorrespondentePercentual.Value = null;
            }
        }

        #endregion

        #region btnPesquisaTitulo_Click

        void btnPesquisaTitulo_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            Model.Titulo modelTitulo = new Model.Titulo();
            modelTitulo.Codigo = textPapelCodigo.Text;

            if (textDataPregao.Value.HasValue)
            {
                modelTitulo.DataPregao = textDataPregao.Value;
            }
            else
            {
                this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.DataPregaoObrigatorio", SinacorMessageBoxImage.Exclamation);
                return;
            }
            if (comboMercado.SelectedValue != null)
            {
                modelTitulo.Mercado = CarregarEnumTipoMercado();
            }

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, TelaChamadora.CadastramentoNegocio);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Ordens.Label.PesquisaTitulo");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                this.ExibirTitulo(pesquisaTitulo.TituloEscolhido);
            }
        }

        #endregion

        #region comboMercado_SelectionChanged

        private void comboMercado_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SinacorComboBox comboMercado = (SinacorComboBox)sender;
            Model.Enum.TipoMercado? tipoMercado = null;

            if (comboMercado.SelectedValue != null)
            {
                if ((Model.Enum.TipoMercado)comboMercado.SelectedIndex != Model.Enum.TipoMercado.Termo)
                {
                    groupTipoTermo.IsEnabled = false;
                }
                else
                {
                    groupTipoTermo.IsEnabled = true;
                }


                RecuperarDetalhesTitulo();
                tipoMercado = CarregarEnumTipoMercado();
            }
            ConfigurarControlesMercadoBolsa(Convert.ToString(comboBolsaMovimento.SelectedValue), tipoMercado);
        }

        #endregion

        #region comboBolsaMovimento_SelectionChanged

        private void comboBolsaMovimento_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SinacorComboBox comboBolsaMovimento = (SinacorComboBox)sender;
            Model.Enum.TipoMercado? mercado = null;
            string bolsa;

            if (comboMercado.SelectedValue != null)
            {
                mercado = (Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado)((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)comboMercado.SelectedValue);
            }

            bolsa = Convert.ToString(comboBolsaMovimento.SelectedValue);
            ConfigurarControlesMercadoBolsa(bolsa, mercado);

            GerarDiasLiquidacao();
        }

        #endregion

        #region TextPapel LostFocus

        private void PapelCodigoLostFocus(object sender, RoutedEventArgs e)
        {
            Model.Enum.TipoMercado? tipoMercado = null;
            if (this.comboMercado.SelectedValue != null)
                tipoMercado = ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)this.comboMercado.SelectedItem).Value;

            if (textDataPregao.Value.HasValue)
            {
                if (btnPesquisaTitulo.IsPressed)
                    return;
                if (String.IsNullOrEmpty(textPapelCodigo.Text)
                    && (!tipoMercado.HasValue))
                {
                    this.ExibirTitulo(null);
                }
                else
                {
                    if (_titulo.Codigo != textPapelCodigo.Text)
                    {
                        RecuperarDetalhesTitulo();
                    }
                    else
                    {
                        ConfigurarControlesPorTitulo(_titulo);
                    }
                }
            }
            else
            {
                return;
            }
        }

        private void textPapelCodigo_LostFocus(object sender, RoutedEventArgs e)
        {
            object[] parm = { e };
            this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new RoutedEventHandler(PapelCodigoLostFocus), sender, parm);
        }

        #endregion

        #region LostFocus DataPregão

        private void textDataPregao_LostFocus(object sender, RoutedEventArgs e)
        {
            object[] parm = { e };
            this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new RoutedEventHandler(DataPregaoLostFocus), sender, parm);
        }

        private void DataPregaoLostFocus(object sender, RoutedEventArgs e)
        {
            if (this._estadoTela == EstadosTela.Inclusao || this._estadoTela == EstadosTela.Alteracao)
            {
                if (textDataPregao.Value.HasValue)
                {
                    textDataMovimento.Text = textDataPregao.Value.Value.ToShortDateString();
                }
            }
            RecuperarDetalhesTitulo();
        }

        #endregion

        #region Menu_Click

        private void Menu_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Application.Current.MainWindow.Topmost = true;
            System.Windows.Application.Current.MainWindow.Show();
            System.Windows.Application.Current.MainWindow.Topmost = false;
        }

        #endregion

        #region btnNovaBusca_Click

        private void btnNovaBusca_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();



            if (_modoExibicao == ModoExibicao.Grid)
            {
                AlterarModoExibicao(ModoExibicao.Form);
            }

            ModelCadastroNegocio _negocioTemp = _negocio;

            RealizarVerificacoesPreNavegacao(_negocioTemp);

            this.LimparCamposTela(sinacorExpander.Content);
            _negocio = null;
            ConfigurarTelaModoPesquisa();
            navigatorPadrao.ItemsSource = this.ListaNegocios;


        }

        #endregion

        #region btnNovoRegistro_Click

        private void btnNovoRegistro_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            GerarNovoNegocioForm();
        }

        #endregion

        #region btnSalvar_Click

        private void btnSalvar_Click(object sender, RoutedEventArgs e)
        {
            this.Salvar();

            validarModoPesquisa = true;
        }

        #endregion

        #region btnExcluirRegistro_Click

        private void btnExcluirRegistro_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.Excluir();
            validarModoPesquisa = true;
        }

        #endregion

        #region btnUndoLast_Click

        private void btnUndoLast_Click(object sender, RoutedEventArgs e)
        {
            string mensagem = Convert.ToString(this.TryFindResource("Bovespa.Ordens.Message.MessageBox_validarEscolhaUndo")); ;
            if (SinacorMessageBox.Show(mensagem, SinacorMessageBoxButton.YesNo) == SinacorMessageBoxResult.Yes)
            {
                if (this.ListaNegocios.Count > 0)
                {
                    this.ExibirDadosNegocio((ModelCadastroNegocio)navigatorPadrao.SelectedItem);
                }
                else
                {
                    this.LimparCamposTela(sinacorExpander.Content);
                }
            }
        }

        #endregion

        #region btnBusca_OnBufferedClick

        private void btnBusca_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ClearServiceErrors();
            this.RecuperarDadosFormulario();
            this.ShowUserWaitingProcess();
            this._presenter.CarregarNegocios(_negocio);
            this.HideUserWaitingProcess();

            navigatorPadrao.IsEnabled = (navigatorPadrao.Items.Count > 0);
        }

        #endregion

        #region textQuantidade_PreviewKeyDown

        private void textQuantidade_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.AbntC2 || e.Key == Key.OemPeriod)
            {
                textQuantidade.Text = ((decimal?)((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value * 1000000).ToString();
            }
            else if (e.Key == Key.K)
            {
                textQuantidade.Text = ((decimal?)((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value * 1000).ToString();
            }
        }

        #endregion



        #endregion

        #region Métodos Privados




        #region RecuperarDadosFormulario

        private void RecuperarDadosFormulario()
        {
            _negocio = new ModelCadastroNegocio();

            if (!string.IsNullOrEmpty(textPapelLiquidacao.Text))
            {
                _negocio.DiasLiquidacao = Convert.ToInt32(textPapelLiquidacao.Value);
            }
            if (!string.IsNullOrEmpty(textDataMovimento.Text))
            {
                _negocio.DataMovimento = Convert.ToDateTime(textDataMovimento.Text);
            }
            if (comboBolsaMovimento.SelectedValue != null)
            {
                _negocio.Bolsa = comboBolsaMovimento.SelectedValue.ToString();
            }
            if (textDataPregao.Value != null && textDataPregao.Value != DateTime.MinValue)
            {
                _negocio.DataPregao = Convert.ToDateTime(textDataPregao.Value.Value.ToShortDateString());
            }
            else if (_negocio.DataMovimento.HasValue)
            {
                _negocio.DataPregao = _negocio.DataMovimento;
                textDataPregao.Value = _negocio.DataPregao;
            }
            if (textHoraNegocio.Value != null && textHoraNegocio.Value != DateTime.MinValue)
            {
                _negocio.HoraNegocio = textHoraNegocio.Value;
            }
            if (radioCompra.IsChecked == true)
            {
                _negocio.TipoNaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Compra;
            }
            if (radioVenda.IsChecked == true)
            {
                _negocio.TipoNaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Venda;
            }
            if (!string.IsNullOrEmpty(textNNegocio.Text))
            {
                _negocio.Numero = Convert.ToInt32(textNNegocio.Value);
            }
            if (!string.IsNullOrEmpty(textNNegocioDigito.Text))
            {
                _negocio.NumeroDigito = Convert.ToInt32(textNNegocioDigito.Value);
            }
            if (!string.IsNullOrEmpty(textContraparte.Text))
            {
                _negocio.ContraParte = Convert.ToInt32(textContraparte.Value);
            }
            if (comboMercado.SelectedValue != null)
            {
                _negocio.Mercado = (EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)comboMercado.SelectedValue;
            }
            _negocio.TipoTermo = TipoTermo.Nenhum;

            if (groupTipoTermo.IsEnabled)
            {
                if (radioAcordoMutuo.IsChecked == true)
                {
                    _negocio.TipoTermo = TipoTermo.AcordoMutuo;
                }
                if (radioVontadeComprador.IsChecked == true)
                {
                    _negocio.TipoTermo = TipoTermo.VontadeComprador;
                }
                if (radioVontadeVendedor.IsChecked == true)
                {
                    _negocio.TipoTermo = TipoTermo.VontadeVendedor;
                }
            }
            if (!string.IsNullOrEmpty(textPapelCodigo.Text))
            {
                _negocio.TituloCodigo = textPapelCodigo.Text;
            }
            if (!string.IsNullOrEmpty(textPapelFatorValorizacao.Text))
            {
                _negocio.FatorCotacao = Convert.ToInt32(textPapelFatorValorizacao.Value);
            }
            if (!string.IsNullOrEmpty(textPapelEspecificacao.Text))
            {
                _negocio.TituloEspecificacao = textPapelEspecificacao.Text;
            }
            if (!string.IsNullOrEmpty(textPapelDescricao.Text))
            {
                _negocio.TituloDescricao = textPapelDescricao.Text;
            }
            if (!string.IsNullOrEmpty(textPrazoTermo.Text))
            {
                _negocio.PrazoTermo = Convert.ToInt32(textPrazoTermo.Value);
            }

            if (textVenctoOpcoes.Value != null)
            {
                _negocio.VencimentoTermoOpcoes = textVenctoOpcoes.Value;
            }
            else
            {
                _negocio.VencimentoTermoOpcoes = null;
            }

            if (!string.IsNullOrEmpty(textPapelObjeto.Text))
            {
                _negocio.TituloObjeto = textPapelObjeto.Text;
            }
            if (!string.IsNullOrEmpty(textQuantidade.Text))
            {
                _negocio.Quantidade = textQuantidade.Value;
            }
            if (!string.IsNullOrEmpty(textPreco.Text))
            {
                _negocio.Preco = textPreco.Value;
            }
            if (checkLiquidada.IsChecked == true)
            {
                _negocio.NaoLiquidaNota = true;
            }
            if (checkPontoGeradora.IsChecked == true)
            {
                _negocio.PontaGeradoraOferta = true;
            }
            if (checkAfter.IsChecked == true)
            {
                _negocio.NegociadoAfterMarket = true;
            }
            if (!string.IsNullOrEmpty(textObservacao.Text))
            {
                _negocio.Observacao = textObservacao.Text;
            }
            if (!string.IsNullOrEmpty(textCorrespondenteCodigo.Text))
            {
                _negocio.CodigoCorrespondente = Convert.ToInt32(textCorrespondenteCodigo.Value);
            }
            if (!string.IsNullOrEmpty(textCorrespondentePercentual.Text))
            {
                _negocio.PercentualCorrespondente = textCorrespondentePercentual.Value;
            }
            if (radioMega.IsChecked == true)
            {
                _negocio.TipoOrigem = TipoOrigemNegocio.MegaBolsa;
            }
            if (radiohome.IsChecked == true)
            {
                _negocio.TipoOrigem = TipoOrigemNegocio.HomeBroker;
            }
            if (radioVivaVoz.IsChecked == true)
            {
                _negocio.TipoOrigem = TipoOrigemNegocio.VivaVoz;
            }
            if (radioLiquidacaoBruto.IsChecked == true)
            {
                _negocio.TipoLiquidacaoNegocio = TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
            }
            if (radioLiquidacaoLiquido.IsChecked == true)
            {
                _negocio.TipoLiquidacaoNegocio = TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
            }
            if (radioAgressorLancador.IsChecked == true)
            {
                _negocio.TipoOfertaBovespaFix = TipoOfertaBovespaFix.AgressorLancador;
            }
            if (radioBalcao.IsChecked == true)
            {
                _negocio.TipoOfertaBovespaFix = TipoOfertaBovespaFix.Balcao;
            }
            if (radioDireto.IsChecked == true)
            {
                _negocio.TipoOfertaBovespaFix = TipoOfertaBovespaFix.Direto;
            }
            if (radioTomador.IsChecked == true)
            {
                _negocio.TipoOfertaBovespaFix = TipoOfertaBovespaFix.Tomador;
            }
            if (radioBox.IsChecked == true)
            {
                _negocio.TipoEstrategia = TipoEstrategia.BOX;
            }
            if (radioDesmanche.IsChecked == true)
            {
                _negocio.TipoEstrategia = TipoEstrategia.DBX;
            }
            if (radioNenhuma.IsChecked == true)
            {
                _negocio.TipoEstrategia = TipoEstrategia.Nenhuma;
            }
            if (radioPOP.IsChecked == true)
            {
                _negocio.TipoEstrategia = TipoEstrategia.POP;
            }

            if (radioBTF.IsChecked.HasValue
                && radioBTF.IsChecked.Value)
            {
                _negocio.TipoEstrategia = TipoEstrategia.BTF;
              
            }

            //Estrategia TVR
            if (radioTVR.IsChecked.HasValue
                && radioTVR.IsChecked.Value)
            {
                _negocio.TipoEstrategia = TipoEstrategia.TVR;

            }
        }

        #endregion

        #region CarregarTitulos

        private void CarregarTitulo(Model.Titulo model)
        {
            base.ShowUserWaitingProcess();
            this._presenter.CarregarTitulo(model);
            base.HideUserWaitingProcess();
        }

        #endregion

        #region Carregar Tipo Origem

        private void CarregarTipoOrigem()
        {
            List<string> itens = new List<string>();
            itens.Add(Enum.GetName(typeof(TipoOrigemNegocio), TipoOrigemNegocio.MegaBolsa));
        }

        #endregion

        #region Carregar Tipo Mercado

        private void CarregarTipoMercado()
        {
            switch (((EnumWrapper<Model.Enum.TipoMercado>)this.comboMercado.SelectedValue).Value.ToString())
            {
                case "BOX":
                    this._titulo.Mercado = Model.Enum.TipoMercado.BOX;
                    break;
                case "Vista":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Vista;
                    break;
                case "OpcaoCompra":
                    this._titulo.Mercado = Model.Enum.TipoMercado.OpcaoCompra;
                    break;
                case "OpcaoVenda":
                    this._titulo.Mercado = Model.Enum.TipoMercado.OpcaoVenda;
                    break;
                case "ExercicioOpcaoCompra":
                    this._titulo.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                    break;
                case "ExercicioOpcaoVenda":
                    this._titulo.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                    break;
                case "Fracionario":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Fracionario;
                    break;
                case "Estruturado":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Estruturado;
                    break;
                case "Leilao":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Leilao;
                    break;
                case "Termo":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Termo;
                    break;
                case "LeilaoNaoCotados":
                    this._titulo.Mercado = Model.Enum.TipoMercado.LeilaoNaoCotados;
                    break;
                case "Futuro":
                    this._titulo.Mercado = Model.Enum.TipoMercado.Futuro;
                    break;
                case "VencimentoFuturo":
                    this._titulo.Mercado = Model.Enum.TipoMercado.VencimentoFuturo;
                    break;
                case "IntegralizacaoResgateCotas":
                    this._titulo.Mercado = Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                    break;
                case "CotasETF":
                    this._titulo.Mercado = Model.Enum.TipoMercado.CotasETF;
                    break;
                default:
                    this._titulo.Mercado = null;
                    break;
            }
        }

        private Model.Enum.TipoMercado? CarregarEnumTipoMercado()
        {
            if (this.comboMercado.SelectedItem != null)
            {
                return ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)this.comboMercado.SelectedItem).Value;
            }
            else
            {
                return null;
            }
        }
        #endregion

        #region Salvar

        private bool Salvar()
        {
            base.ClearServiceErrors();

            if (!ValidateContainer())
            {
                if (comboMercado.SelectedValue != null &&
                ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)this.comboMercado.SelectedItem).Value == Model.Enum.TipoMercado.Termo)
                {
                    if (radioVontadeComprador.IsChecked == false && radioVontadeVendedor.IsChecked == false && radioAcordoMutuo.IsChecked == false)
                    {
                        base.ShowError("Bovespa.Ordens.Message.TipoTermoAlgumItem");

                    }
                }
                return false;
            }

            if (_modoExibicao == ModoExibicao.Form)
            {
                return SalvarModoFormulario();
            }
            return false;
        }

        private bool SalvarModoFormulario()
        {
            bool existeErro = false;

            if (comboBolsaMovimento.SelectedValue == null)
            {
                base.ShowError("Bovespa.Ordens.Label.BolsaMovimentoObrigatorio");
                existeErro = true;
            }
            if (!textDataPregao.Value.HasValue)
            {
                if (!String.IsNullOrEmpty(textDataMovimento.Text))
                {
                    textDataPregao.Value = Convert.ToDateTime(textDataMovimento.Text);
                }
                if (!textDataPregao.Value.HasValue)
                {
                    base.ShowError("Bovespa.Ordens.Message.DataPregaoObrigatorio");
                    existeErro = true;
                }
            }
            if (textDataMovimento.Text != "")
            {
                if (textDataPregao.Value > Convert.ToDateTime(textDataMovimento.Text))
                {
                    base.ShowError("Bovespa.Ordens.Message.DataPregaoMaiorDataMovimento");
                    existeErro = true;
                }
            }
            if (radioCompra.IsChecked == false && radioVenda.IsChecked == false)
            {
                base.ShowError("Bovespa.Ordens.Message.NaturezaAlgumItem");
                existeErro = true;
            }
            if (String.IsNullOrEmpty(textNNegocio.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.NumeroNegocioObrigatorio");
                existeErro = true;
            }
            if (comboBolsaMovimento.SelectedValue != null)
            {
                if (String.IsNullOrEmpty(textNNegocioDigito.Text) && comboBolsaMovimento.SelectedValue.ToString() != "1")
                {
                    base.ShowError("Bovespa.Ordens.Message.DigitoNegocioObrigatorio");
                    existeErro = true;
                }
            }
            if (String.IsNullOrEmpty(textContraparte.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.ContraparteObrigatorio");
                existeErro = true;
            }
            if (comboMercado.SelectedValue == null)
            {
                base.ShowError("Bovespa.Ordens.Message.MercadoObrigatorio");
                existeErro = true;
            }
            if (textVenctoOpcoes.IsEnabled == true && textVenctoOpcoes.Value == null)// && comboMercado.SelectedValue != null && (TipoMercado)comboMercado.SelectedValue == TipoMercado.Futuro)
            {
                base.ShowError("Bovespa.Ordens.Message.VencimentoTermoOpcoes");
                existeErro = true;
            }
            if (textPapelObjeto.IsEnabled == true && String.IsNullOrEmpty(textPapelObjeto.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.PapelObjetoObrigatorio");
                existeErro = true;
            }
            if (String.IsNullOrEmpty(textPapelCodigo.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.PainelCodigoObrigatorio");
                existeErro = true;
            }
            if (_estadoTela == EstadosTela.Alteracao)
            {
                if (String.IsNullOrEmpty(textPapelFatorValorizacao.Text))
                {
                    base.ShowError("Bovespa.Ordens.Message.PainelFatorValorizacaoObrigatorio");
                    existeErro = true;
                }
            }
            if (comboMercado.SelectedValue != null &&
                ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)this.comboMercado.SelectedItem).Value == Model.Enum.TipoMercado.Termo)
            {
                if (radioVontadeComprador.IsChecked == false && radioVontadeVendedor.IsChecked == false && radioAcordoMutuo.IsChecked == false)
                {
                    base.ShowError("Bovespa.Ordens.Message.TipoTermoAlgumItem");
                    existeErro = true;
                }
                if (textPrazoTermo.IsEnabled == true)
                {
                    if (!String.IsNullOrEmpty(textPrazoTermo.Text))
                    {
                        if (Convert.ToInt32(textPrazoTermo.Text) <= 0)
                        {
                            base.ShowError("Bovespa.Ordens.Message.PrazoTermoMaiorZero");
                            existeErro = true;
                        }
                    }
                    else
                    {
                        base.ShowError("Bovespa.Ordens.Message.PrazoTermoObrigatorio");
                        existeErro = true;
                    }
                }
            }
            if (String.IsNullOrEmpty(textQuantidade.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.QuantidadeObrigatorio");
                existeErro = true;
            }
            if (String.IsNullOrEmpty(textPreco.Text))
            {
                base.ShowError("Bovespa.Ordens.Message.PrecoObrigatorio");
                existeErro = true;
            }

            if (comboBolsaMovimento.SelectedValue != null)
            {
                string bolsa = comboBolsaMovimento.SelectedValue.ToString();
                if (bolsa != "3" && bolsa != "7")
                {
                    if (radioLiquidacaoBruto.IsChecked == false && radioLiquidacaoLiquido.IsChecked == false)
                    {
                        radioLiquidacaoLiquido.IsChecked = true;
                    }
                }
                else
                {
                    if (radioLiquidacaoBruto.IsChecked == false && radioLiquidacaoLiquido.IsChecked == false)
                    {
                        base.ShowError("Bovespa.Ordens.Message.TipoLiquidacaoAlgumItem");
                        existeErro = true;
                    }
                    if (radioDireto.IsChecked == false && radioAgressorLancador.IsChecked == false &&
                        radioBalcao.IsChecked == false && radioTomador.IsChecked == false)
                    {
                        base.ShowError("Bovespa.Ordens.Message.TipoOfertaBovespaFix");
                        existeErro = true;
                    }
                }
            }
            if (!_tituloValidoRecuperado)
            {
                base.ShowError("Bovespa.Ordens.Message.TituloInvalido");
                existeErro = true;
            }
            if (!existeErro)
            {
                this.RecuperarDadosFormulario();
                if (_estadoTela.Value == EstadosTela.Inclusao)
                {
                    base.ShowUserWaitingProcess();
                    if (!_presenter.SalvarNegocio(_negocio))
                    {
                        return false;
                    }
                }
                else if (_estadoTela.Value == EstadosTela.Alteracao)
                {
                    base.ShowUserWaitingProcess();
                    if (!_presenter.AlterarNegocio(_negocio))
                    {
                        return false;
                    }
                }
                base.HideUserWaitingProcess();
            }
            else
            {
                return false;
            }

            return true;
        }

        #endregion

        #region Excluir

        private void Excluir()
        {
            if (_modoExibicao == ModoExibicao.Form)
            {
                string message = Convert.ToString(FindResource("Bovespa.Ordens.Message.MessageBox_NEG_ConfirmarExclusao"));
                if (SinacorMessageBox.Show(message, SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes)
                    ExcluirModoFormulario();
            }
        }

        private void ExcluirModoFormulario()
        {
            if (this._negocio == null || textNNegocio.IsEnabled)
            {
                this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_nenhumNegocioSelecionado", SinacorMessageBoxImage.Exclamation);
            }
            else
            {
                _negocio.Bolsa = comboBolsaMovimento.SelectedValue.ToString();
                _negocio.TituloCodigo = textPapelCodigo.Text;
                _negocio.DataPregao = textDataPregao.Value;
                _negocio.Numero = Convert.ToInt32(textNNegocio.Value);

                if (radioCompra.IsChecked == true)
                {
                    _negocio.TipoNaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Compra;
                }
                if (radioVenda.IsChecked == true)
                {
                    _negocio.TipoNaturezaOperacao = Model.Enum.TipoNaturezaOperacao.Venda;
                }
                base.ShowUserWaitingProcess();
                this._presenter.ExcluirNegocio(_negocio);
                base.HideUserWaitingProcess();
            }
        }

        #endregion

        #region Exibir Titulos

        private void ExibirTituloForm(Model.Titulo modelTitulo)
        {
            _desabilitarRecuperacaoTitulo = true;
            if (modelTitulo != null)
            {
                textPapelCodigo.Text = modelTitulo.Codigo;
                textPapelEspecificacao.Text = modelTitulo.Especificacao;
                textPapelDescricao.Text = modelTitulo.Descricao;
                textPapelFatorValorizacao.Text = Convert.ToString(modelTitulo.FatorCotacao);//20080412 14:52 - Alterado - DMilanez.7Comm
                if (modelTitulo.Mercado != null)
                {
                    for (int i = 0; comboMercado.Items.Count > i; i++)
                    {
                        if ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)comboMercado.Items[i] == modelTitulo.Mercado)
                        {
                            comboMercado.SelectedIndex = i;
                            break;
                        }

                    }
                }
                textVenctoOpcoes.Value = modelTitulo.DataVencimentoTermo;
                textPapelObjeto.Text = modelTitulo.TituloObjetoOpcoes;

                if (comboBolsaMovimento.SelectedValue != null &&
                    (radioLiquidacaoBruto.IsChecked == true || radioLiquidacaoLiquido.IsChecked == true))
                {
                    GerarDiasLiquidacao();
                }
                else
                {
                    textPapelLiquidacao.Text = Convert.ToString(modelTitulo.DiasLiquidacao);
                }
            }
            else
            {
                textPapelEspecificacao.Text = string.Empty;
                textPapelDescricao.Text = string.Empty;
                textPapelFatorValorizacao.Text = string.Empty;
                textVenctoOpcoes.Value = null;
                textPapelObjeto.Text = string.Empty;

                if (comboBolsaMovimento.SelectedValue != null &&
                    (radioLiquidacaoBruto.IsChecked == true || radioLiquidacaoLiquido.IsChecked == true))
                {
                    GerarDiasLiquidacao();
                }
                else
                {
                    textPapelLiquidacao.Text = string.Empty;
                }
            }
            _desabilitarRecuperacaoTitulo = false;
        }

        public void ExibirTitulo(Model.Titulo modelTitulo)
        {
            if (modelTitulo != null)
            {
                _tituloValidoRecuperado = true;
                _tituloRecuperado = modelTitulo;
            }
            else
            {
                _tituloRecuperado = null;
                _titulo = new Model.Titulo();
                _tituloValidoRecuperado = false;
            }

            if (_modoExibicao == ModoExibicao.Form)
            {
                ExibirTituloForm(modelTitulo);
            }
            if (modelTitulo != null)
            {
                ConfigurarControlesMercadoBolsa(Convert.ToString(comboBolsaMovimento.SelectedValue), ((modelTitulo.Mercado != null) ? modelTitulo.Mercado.Value : (Model.Enum.TipoMercado?)null));
            }
            ConfigurarControlesPorTitulo(modelTitulo);
        }

        private void ConfigurarControlesPorTitulo(Model.Titulo titulo)
        {
            if (_modoExibicao == ModoExibicao.Form)
            {
                ConfigurarControlesPorTituloForm(titulo);
            }
        }

        private void ConfigurarControlesPorTituloForm(Model.Titulo titulo)
        {



            if (titulo == null || string.IsNullOrEmpty(titulo.Codigo) || !(titulo.Mercado != null))
            {
                textPapelEspecificacao.Text = string.Empty;
                textPapelDescricao.Text = string.Empty;
                textVenctoOpcoes.IsEnabled = true;
                textPrazoTermo.IsEnabled = true;
                textVenctoOpcoes.IsEnabled = false;
                textPrazoTermo.IsRequired = true;
                labelPrazoTermo.IsTargetFieldRequired = true;
                textPrazoTermo.UpdateLayout();
                labelPrazoTermo.UpdateLayout();

                HabilitarEdicaoTipoTermo(true);


            }
            else
            {
                if (titulo.Mercado == Model.Enum.TipoMercado.OpcaoVenda ||
                    titulo.Mercado == Model.Enum.TipoMercado.OpcaoCompra ||
                    titulo.Mercado == Model.Enum.TipoMercado.Termo
                    )
                {
                    int codPapel = 0;
                    Regex r = new Regex(@"[0-9]+");
                    string value = r.Match(titulo.Codigo).Value;
                    int.TryParse(value, out codPapel);
                    if (titulo.Mercado == Model.Enum.TipoMercado.OpcaoVenda)
                    {
                        textVenctoOpcoes.IsEnabled = true;
                        textVenctoOpcoes.IsRequired = true;
                        labelVenctoOpcoes.IsTargetFieldRequired = true;
                        textVenctoOpcoes.UpdateLayout();
                        labelVenctoOpcoes.UpdateLayout();

                        textPapelObjeto.Text = string.Empty;
                        textPapelObjeto.IsEnabled = false;
                        textPapelObjeto.IsRequired = false;
                        labelPapelObjeto.IsTargetFieldRequired = false;
                        labelPapelObjeto.UpdateLayout();

                        //textPrazoTermo.Text = string.Empty;
                        textPrazoTermo.IsEnabled = false;
                        textPrazoTermo.IsRequired = false;
                        labelPrazoTermo.IsTargetFieldRequired = false;
                        labelPrazoTermo.UpdateLayout();
                    }
                    else if (titulo.Mercado == Model.Enum.TipoMercado.OpcaoCompra)
                    {
                        textVenctoOpcoes.IsEnabled = true;
                        textVenctoOpcoes.IsRequired = true;
                        labelVenctoOpcoes.IsTargetFieldRequired = true;
                        textVenctoOpcoes.UpdateLayout();
                        labelVenctoOpcoes.UpdateLayout();

                        textPapelObjeto.IsEnabled = true;
                        textPapelObjeto.IsRequired = true;
                        textPapelObjeto.UpdateLayout();
                        labelPapelObjeto.IsTargetFieldRequired = true;
                        labelPapelObjeto.UpdateLayout();

                        //textPrazoTermo.Text = string.Empty;
                        textPrazoTermo.IsEnabled = false;
                        textPrazoTermo.IsRequired = false;
                        labelPrazoTermo.IsTargetFieldRequired = false;
                        labelPrazoTermo.UpdateLayout();
                        textPrazoTermo.UpdateLayout();
                    }
                    else if (titulo.Mercado == Model.Enum.TipoMercado.Termo)
                    {
                        groupTipoTermo.IsEnabled = true;
                        if (codPapel > 49)
                        {
                            textVenctoOpcoes.IsEnabled = true;
                            textVenctoOpcoes.IsRequired = true;
                            labelVenctoOpcoes.IsTargetFieldRequired = true;
                            textVenctoOpcoes.UpdateLayout();
                            labelVenctoOpcoes.UpdateLayout();

                            textPapelObjeto.Text = string.Empty;
                            textPapelObjeto.IsEnabled = false;
                            textPapelObjeto.IsRequired = false;
                            labelPapelObjeto.IsTargetFieldRequired = false;
                            textPapelObjeto.UpdateLayout();
                            labelPapelObjeto.UpdateLayout();

                            textPrazoTermo.IsEnabled = false;
                            textPrazoTermo.IsRequired = false;
                            //textPrazoTermo.Text = string.Empty;
                            labelPrazoTermo.IsTargetFieldRequired = false;
                            labelPrazoTermo.UpdateLayout();
                            textPrazoTermo.UpdateLayout();
                        }
                        else
                        {
                            textVenctoOpcoes.IsEnabled = false;
                            textVenctoOpcoes.IsRequired = false;
                            textVenctoOpcoes.Value = null;
                            labelVenctoOpcoes.IsTargetFieldRequired = false;
                            textVenctoOpcoes.UpdateLayout();
                            labelVenctoOpcoes.UpdateLayout();

                            textPapelObjeto.Text = string.Empty;
                            textPapelObjeto.IsEnabled = false;
                            textPapelObjeto.IsRequired = false;
                            labelPapelObjeto.IsTargetFieldRequired = false;
                            textPapelObjeto.UpdateLayout();
                            labelPapelObjeto.UpdateLayout();

                            textPrazoTermo.IsEnabled = true;
                            textPrazoTermo.IsRequired = true;
                            labelPrazoTermo.IsTargetFieldRequired = true;
                            labelPrazoTermo.UpdateLayout();
                            textPrazoTermo.UpdateLayout();
                        }
                    }
                }
                else
                {
                    textVenctoOpcoes.IsEnabled = false;
                    textVenctoOpcoes.IsRequired = false;
                    textVenctoOpcoes.Value = null;
                    labelVenctoOpcoes.IsTargetFieldRequired = false;
                    textVenctoOpcoes.UpdateLayout();
                    labelVenctoOpcoes.UpdateLayout();

                    textPapelObjeto.Text = string.Empty;
                    textPapelObjeto.IsEnabled = false;
                    textPapelObjeto.IsRequired = false;
                    labelPapelObjeto.IsTargetFieldRequired = false;
                    textPapelObjeto.UpdateLayout();
                    labelPapelObjeto.UpdateLayout();

                    textPrazoTermo.IsEnabled = false;
                    textPrazoTermo.IsRequired = false;
                    //textPrazoTermo.Text = string.Empty;
                    labelPrazoTermo.IsTargetFieldRequired = false;
                    labelPrazoTermo.UpdateLayout();
                    textPrazoTermo.UpdateLayout();
                }
            }
        }

        #endregion


        #region RecuperarCorrespondente

        private void RecuperarCorrespondente()
        {
            this.ShowUserWaitingProcess();
            Sinacor.UI.Bovespa.Clientes.Model.Correspondente request = new Sinacor.UI.Bovespa.Clientes.Model.Correspondente();
            request.Codigo = Convert.ToInt32(textCorrespondenteCodigo.Value);
            this._presenter.CarregarCorrespondente(request);
            this.HideUserWaitingProcess();
        }

        #endregion

        #region Configurar Controles por Bolsa e Tipo Liquidacao

        private void GerarDiasLiquidacao()
        {
            string bolsa = null;
            TipoLiquidacaoNegocio? tipoLiquidacao = null;
            _tituloRecuperado = _titulo;

            if (comboBolsaMovimento.SelectedValue != null)
            {
                bolsa = Convert.ToString(comboBolsaMovimento.SelectedValue);
            }
            if (radioLiquidacaoBruto.IsChecked == true)
            {
                tipoLiquidacao = TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
            }
            else if (radioLiquidacaoLiquido.IsChecked == true)
            {
                tipoLiquidacao = TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
            }
            if (tipoLiquidacao.HasValue && !string.IsNullOrEmpty(bolsa))
            {
                if (tipoLiquidacao.Value == TipoLiquidacaoNegocio.LiquidacaoPeloBruto)
                {
                    textPapelLiquidacao.Text = "0";
                }
                else if (bolsa == "3" || bolsa == "7")
                {
                    textPapelLiquidacao.Text = "1";
                }
                else
                {
                    if (_tituloRecuperado != null)
                    {
                        textPapelLiquidacao.Text = Convert.ToString(_tituloRecuperado.DiasLiquidacao);
                    }
                    else
                    {
                        textPapelLiquidacao.Text = string.Empty;
                    }
                }
            }
        }

        #endregion

        #region Configurar Controles Por Mercado e Bolsa

        private void ConfigurarControlesMercadoBolsa(string bolsa, Model.Enum.TipoMercado? mercado)
        {
            if (mercado != null && mercado != Model.Enum.TipoMercado.OpcaoCompra && mercado != Model.Enum.TipoMercado.OpcaoVenda)
            {
                textPapelObjeto.IsEnabled = false;
                textPapelObjeto.Text = string.Empty;
            }
            else
            {
                textPapelObjeto.IsEnabled = true;
            }
            if (mercado != null && mercado != Model.Enum.TipoMercado.Termo)
            {
                HabilitarEdicaoTipoTermo(false);
            }
            else
            {
                HabilitarEdicaoTipoTermo(true);
            }


            if (_estadoTela.HasValue)
            {
                LimparEdicaoTipoOfertaBovespa();
                LimparEdicaoTipoEstrategia();

                if (bolsa == "2" ||
                        ((bolsa == "1" || bolsa == "5" || bolsa == "6" || bolsa == "8") &&
                            (mercado == Model.Enum.TipoMercado.Estruturado ||
                             mercado == Model.Enum.TipoMercado.Leilao ||
                             mercado == Model.Enum.TipoMercado.Termo ||
                             mercado == Model.Enum.TipoMercado.LeilaoNaoCotados ||
                             mercado == Model.Enum.TipoMercado.Futuro ||
                             mercado == Model.Enum.TipoMercado.VencimentoFuturo ||
                             mercado == Model.Enum.TipoMercado.BOX)
                        ) ||
                        ((bolsa == "5" || bolsa == "6" || bolsa == "8") &&
                            (mercado == Model.Enum.TipoMercado.Vista ||
                             mercado == Model.Enum.TipoMercado.Fracionario ||
                             mercado == Model.Enum.TipoMercado.IntegralizacaoResgateCotas ||
                             mercado == Model.Enum.TipoMercado.CotasETF)
                        )
                    )
                {
                    if (mercado == Model.Enum.TipoMercado.Vista)
                    {
                        HabilitarEdicaoTipoEstrategia(false, false, false, true, true, true);
                    }
                    if (mercado == Model.Enum.TipoMercado.Fracionario)
                    {
                        HabilitarEdicaoTipoEstrategia(false, false, false, true, false, false);
                    }
                    else
                    {
                        HabilitarEdicaoTipoEstrategia(false, false, false, true, false, false);
                    }
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }
                else if (bolsa == "1" && (mercado == Model.Enum.TipoMercado.Vista))
                {
                    HabilitarEdicaoTipoEstrategia(false, true, false, true, true, true);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }

                else if (bolsa == "1" && (mercado == Model.Enum.TipoMercado.Fracionario))
                {
                    HabilitarEdicaoTipoEstrategia(false, true, false, true, false, false);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }

                else if (bolsa == "1" && (mercado == Model.Enum.TipoMercado.IntegralizacaoResgateCotas ||
                                          mercado == Model.Enum.TipoMercado.CotasETF))
                {
                    HabilitarEdicaoTipoEstrategia(false, true, false, true, false, false);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }
                else if (bolsa == "1" && (mercado == Model.Enum.TipoMercado.OpcaoCompra || mercado == Model.Enum.TipoMercado.OpcaoVenda))
                {
                    HabilitarEdicaoTipoEstrategia(true, true, true, true, false, false);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }
                else if ((bolsa == "5" || bolsa == "6" || bolsa == "8") && (mercado == Model.Enum.TipoMercado.OpcaoCompra || mercado == Model.Enum.TipoMercado.OpcaoVenda))
                {
                    HabilitarEdicaoTipoEstrategia(true, false, true, true, false, false);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }
                else if (bolsa == "3" || bolsa == "7")
                {
                    HabilitarEdicaoTipoEstrategia(false);
                    HabilitarEdicaoTipoOfertaBovespa(true);
                }
                else if ((bolsa == "1" || bolsa == "5" || bolsa == "6" || bolsa == "8") && (mercado == Model.Enum.TipoMercado.ExercicioOpcaoCompra || mercado == Model.Enum.TipoMercado.ExercicioOpcaoVenda))
                {
                    HabilitarEdicaoTipoEstrategia(false, false, true, true, false, false);
                    HabilitarEdicaoTipoOfertaBovespa(false);
                }

            }
        }

        #endregion





        #region Visibilidade de Form e Grid

        private void AlterarModoExibicao(ModoExibicao modo)
        {
            this.ClearServiceErrors();
            if (modo == ModoExibicao.Grid)
            {
                AlterarModoExibicaoParaGrid(modo);
            }
            else if (modo == ModoExibicao.Form)
            {
                AlterarModoExibicaoParaForm(modo);
            }
        }

        private void AlterarModoExibicaoParaForm(ModoExibicao modo)
        {
            if (_modoExibicao == ModoExibicao.Grid)
            {
                ModelCadastroNegocio negocio = dtgDados.SelectedItem as ModelCadastroNegocio;
                if (negocio != null)
                {
                    this._indexadorNegocio = ListaNegocios.IndexOf(negocio);
                }
                else
                    this._indexadorNegocio = 0;
            }

            _modoExibicao = modo;

            gridGrid.Visibility = Visibility.Collapsed;
        }

        private void AlterarModoExibicaoParaGrid(ModoExibicao modo)
        {
            if (this._indexadorNegocio >= ListaNegocios.Count)
            {
                this._indexadorNegocio = 0;
            }
            _estadoTela = EstadosTela.Alteracao;
            if (ListaNegocios.Count > 0)
            {
                ItemCollection listaNegociosGrid = dtgDados.Items;
                if (listaNegociosGrid != null)
                {
                    ModelCadastroNegocio negocio = ListaNegocios[this._indexadorNegocio];
                    this._indexadorNegocio = listaNegociosGrid.IndexOf(negocio);
                }
            }
            _modoExibicao = modo;
            gridGrid.Visibility = Visibility.Visible;
        }

        #endregion

        #region RealizarVerificacoesPreNovaBusca

        private bool RealizarVerificacoesPreNovaBusca()
        {
            ModelCadastroNegocio _negocioAnteriorAPesquisa = null;

            if (this._negocio == null)
            {
                return true;
            }
            else
            {
                _negocioAnteriorAPesquisa = (ModelCadastroNegocio)navigatorPadrao.SelectedItem;
            }

            this.RecuperarDadosFormulario();

            if (_estadoTela == EstadosTela.Alteracao)
            {
                bool questionar = false;
                if (this.ListaNegocios.Count > 0)
                {
                    if (navigatorPadrao.SelectedIndex != -1)
                    {

                        if (!this._presenter.CompararNegocios(this._negocio, _negocioAnteriorAPesquisa, true))
                        {
                            questionar = true;
                        }
                    }
                }
                if (questionar)
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar")), "", SinacorMessageBoxButton.YesNoCancel, SinacorMessageBoxImage.Question);
                    if (result == SinacorMessageBoxResult.Yes)
                    {
                        if (!this.Salvar())
                        {
                            return false;
                        }
                    }
                    else if (result == SinacorMessageBoxResult.Cancel)
                    {
                        return false;
                    }
                }
            }
            else if (_estadoTela == EstadosTela.Inclusao)
            {
                if (!this._presenter.CompararNegocios(this._negocio, new ModelCadastroNegocio(), true))
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar")), "", SinacorMessageBoxButton.YesNoCancel, SinacorMessageBoxImage.Question);

                    if (result == SinacorMessageBoxResult.Yes)
                    {
                        if (!this.Salvar())
                        {
                            return false;
                        }
                    }
                    else if (result == SinacorMessageBoxResult.Cancel)
                    {
                        return false;
                    }
                }
            }

            return true;
        }
        #endregion

        #region RecuperarDetalhesTitulo

        private void RecuperarDetalhesTitulo()
        {
            if (_desabilitarRecuperacaoTitulo)
            {
                return;
            }
            if (!string.IsNullOrEmpty(textPapelCodigo.Text))
            {
                _titulo.Codigo = textPapelCodigo.Text.Trim();
            }
            else
            {
                _titulo.Codigo = null;
            }
            if (comboMercado.SelectedValue != null)
            {
                CarregarTipoMercado();
            }
            else
            {
                _titulo.Mercado = null;
            }
            if (textDataPregao.Value.HasValue && textDataPregao.Value != DateTime.MinValue)
            {
                _titulo.DataPregao = DateTime.Parse(textDataPregao.Value.Value.ToShortDateString());
            }
            else
            {
                _titulo.DataPregao = null;
            }

            RecuperarDetalhesTitulo(_titulo);
        }
        #endregion

        #region GerarNovoNegocioForm

        private void GerarNovoNegocioForm()
        {
            ModelCadastroNegocio negocioTemp = (ModelCadastroNegocio)navigatorPadrao.SelectedItem;

            this.RecuperarDadosFormulario();

            if (_estadoTela == EstadosTela.Alteracao)
            {
                bool questionar = false;
                if (ListaNegocios.Count > 0)
                {

                    if (negocioTemp != null && !this._presenter.CompararNegocios(this._negocio, negocioTemp, true))
                    {
                        questionar = true;
                    }
                }
                else if (!this._presenter.CompararNegocios(this._negocio, new ModelCadastroNegocio(), true))
                {
                    questionar = true;
                }

                if (questionar)
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar")), "", SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);

                    if (result == SinacorMessageBoxResult.Yes)
                    {
                        if (!this.Salvar())
                        {
                            return;
                        }
                    }
                }
                LimparCamposTela(sinacorExpander.Content);
                this._negocio = null;
                //this._desabilitarControleNavegacao = true;
                this.navigatorPadrao.ItemsSource = this.ListaNegocios;
                this.navigatorPadrao.SelectedItem = this._negocio;
                this._desabilitarControleNavegacao = false;
            }
            else if (_estadoTela == EstadosTela.Pesquisa)
            {
                if (!this._presenter.CompararNegocios(this._negocio, new ModelCadastroNegocio(), true))
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_ManterDadosDigitados")), "", SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);
                    if (result == SinacorMessageBoxResult.No)
                    {
                        LimparCamposTela(sinacorExpander.Content);
                        this._negocio = new ModelCadastroNegocio();
                    }
                }
                else
                {
                    this._negocio = new ModelCadastroNegocio();
                }
                this._indexadorNegocio = this.ListaNegocios.Count - 1;
            }
            else if (_estadoTela == EstadosTela.Inclusao)
            {
                ListaNegocios = null;
                this._indexadorNegocio = 0;
                if (!this._presenter.CompararNegocios(this._negocio, new ModelCadastroNegocio(), true))
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show(Convert.ToString(PSE.Framework.UI.Resources.ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_ManterDadosDigitados")), "", SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);

                    if (result == SinacorMessageBoxResult.No)
                    {
                        LimparCamposTela(sinacorExpander.Content);
                        this._negocio = new ModelCadastroNegocio();
                    }
                    else if (result == SinacorMessageBoxResult.Cancel)
                    {
                        return;
                    }
                }
                else
                {
                    this._negocio = new ModelCadastroNegocio();
                }

                //if (ListaNegocios.Count == 0)
                //{
                //    this._indexadorNegocio = 0;
                // }
                //else
                //{
                //    this.ListaNegocios[_indexadorNegocio] = this._negocio;
                //}
            }
            ConfigurarTelaModoInclusao();

            if (_modoExibicao == ModoExibicao.Form)
            {
                navigatorPadrao.SelectedIndex = this.ListaNegocios.Count;
            }
            navigatorPadrao.IsEnabled = false;

            base.ShowUserWaitingProcess();
            //
            this._presenter.CarregarDataPregao();
            this._presenter.CarregarDataMovimento();
            base.HideUserWaitingProcess();
        }
        #endregion

        #region RecuperarDetalhesTitulo

        private void RecuperarDetalhesTitulo(Model.Titulo titulo)
        {
            if (titulo != null && !String.IsNullOrEmpty(titulo.Codigo) && titulo.DataPregao.HasValue)
            {
                this.CarregarTitulo(titulo);
            }
        }

        #endregion

        #region Configurar Interface Modo Alteracao

        private void ConfigurarTelaModoAlteracao()
        {
            this.comboBolsaMovimento.IsRequired = true;
            this.comboMercado.IsRequired = true;
            this.textNNegocio.IsRequired = true;
            this.textVenctoOpcoes.IsRequired = true;
            this.textQuantidade.IsRequired = true;
            this.textPreco.IsRequired = true;
            this.textContraparte.IsRequired = true;
            this.textPapelCodigo.IsRequired = true;
            this.labelBolsaMovimento.IsTargetFieldRequired = true;
            this.labelNNegocio.IsTargetFieldRequired = true;
            this.labelVenctoOpcoes.IsTargetFieldRequired = true;
            this.labelQuantidade.IsTargetFieldRequired = true;
            this.labelPreco.IsTargetFieldRequired = true;
            this.labelContraparte.IsTargetFieldRequired = true;
            this.labelCodigo.IsTargetFieldRequired = true;

            AtualizarCamposObrigatorios();
            _estadoTela = EstadosTela.Alteracao;

            this.btnExcluirRegistro.Visibility = Visibility.Visible;
            this.btnNovoRegistro.Visibility = Visibility.Visible;
            this.btnNovaBusca.Visibility = Visibility.Visible;
            this.btnSalvar.Visibility = Visibility.Visible;

            this.btnBusca.IsEnabled = false;

            textVenctoOpcoes.IsEnabled = true;
            textPrazoTermo.IsEnabled = true;
            textDataMovimento.IsEnabled = false;
            textVenctoOpcoes.IsRequired = true;
            labelVenctoOpcoes.IsTargetFieldRequired = true;
            textVenctoOpcoes.UpdateLayout();
            labelVenctoOpcoes.UpdateLayout();
            comboBolsaMovimento.IsEnabled = false;
            textDataPregao.IsEnabled = false;
            groupNatureza.IsEnabled = false;
            textNNegocio.IsEnabled = false;
            textNNegocioDigito.IsEnabled = false;
            comboMercado.IsEnabled = false;
            textPapelCodigo.IsEnabled = false;
            HabilitarEdicaoTipoTermo(true);
            HabilitarEdicaoTipoEstrategia(true);
            HabilitarEdicaoTipoOfertaBovespa(true);
            radiohome.IsEnabled = false;
            radioVivaVoz.IsEnabled = false;
            _tituloRecuperado = null;

        }

        #endregion

        #region Configurar Interface Modo Inclusao

        private void ConfigurarTelaModoInclusao()
        {
            this.comboBolsaMovimento.IsRequired = true;
            this.comboMercado.IsRequired = true;
            this.textNNegocio.IsRequired = true;
            this.textVenctoOpcoes.IsRequired = true;
            this.textQuantidade.IsRequired = true;
            this.textPreco.IsRequired = true;
            this.textContraparte.IsRequired = true;
            this.textPapelCodigo.IsRequired = true;

            this.labelBolsaMovimento.IsTargetFieldRequired = true;
            this.labelNNegocio.IsTargetFieldRequired = true;
            this.labelVenctoOpcoes.IsTargetFieldRequired = true;
            this.labelQuantidade.IsTargetFieldRequired = true;
            this.labelPreco.IsTargetFieldRequired = true;
            this.labelContraparte.IsTargetFieldRequired = true;
            this.labelCodigo.IsTargetFieldRequired = true;

            AtualizarCamposObrigatorios();

            _titulo = new Model.Titulo();
            _negocio = new ModelCadastroNegocio();
            _estadoTela = EstadosTela.Inclusao;

            this.btnExcluirRegistro.Visibility = Visibility.Collapsed;
            this.btnNovoRegistro.Visibility = Visibility.Visible;
            this.btnNovaBusca.Visibility = Visibility.Visible;
            this.btnSalvar.Visibility = Visibility.Visible;

            this.btnBusca.IsEnabled = false;

            textDataMovimento.IsEnabled = false;
            textDataPregao.IsEnabled = true;
            comboBolsaMovimento.IsEnabled = true;

            groupNatureza.IsEnabled = true;
            textNNegocio.IsEnabled = true;
            textNNegocioDigito.IsEnabled = true;
            comboMercado.IsEnabled = true;

            textPapelCodigo.IsEnabled = true;
            textVenctoOpcoes.IsEnabled = true;
            textVenctoOpcoes.UpdateLayout();
            labelVenctoOpcoes.UpdateLayout();


            textPrazoTermo.IsEnabled = true;

            HabilitarEdicaoTipoTermo(true);

            HabilitarEdicaoTipoEstrategia(true);

            HabilitarEdicaoTipoOfertaBovespa(true);

            radiohome.IsEnabled = false;
            radioVivaVoz.IsEnabled = false;

            _tituloRecuperado = null;
        }
        #endregion

        #region Configurar Interface para modo Pesquisa

        private void ConfigurarTelaModoPesquisa()
        {
            this.comboBolsaMovimento.IsRequired = false;
            this.comboMercado.IsRequired = false;
            this.textNNegocio.IsRequired = false;
            this.textVenctoOpcoes.IsRequired = false;
            this.textQuantidade.IsRequired = false;
            this.textPreco.IsRequired = false;
            this.textContraparte.IsRequired = false;
            this.textPapelCodigo.IsRequired = false;
            this.textPrazoTermo.IsRequired = false;
            this.textPapelObjeto.IsRequired = false;

            this.labelBolsaMovimento.IsTargetFieldRequired = false;
            this.labelNNegocio.IsTargetFieldRequired = false;
            this.labelVenctoOpcoes.IsTargetFieldRequired = false;
            this.labelQuantidade.IsTargetFieldRequired = false;
            this.labelPreco.IsTargetFieldRequired = false;
            this.labelContraparte.IsTargetFieldRequired = false;
            this.labelCodigo.IsTargetFieldRequired = false;
            this.labelPrazoTermo.IsTargetFieldRequired = false;
            this.labelPapelObjeto.IsTargetFieldRequired = false;

            AtualizarCamposObrigatorios();
            _titulo = new Titulo();
            _estadoTela = EstadosTela.Pesquisa;
            LimparCamposTela(this.Content);



            this.btnExcluirRegistro.Visibility = Visibility.Collapsed;
            this.btnNovoRegistro.Visibility = Visibility.Visible;
            this.btnNovaBusca.Visibility = Visibility.Visible;
            this.btnSalvar.Visibility = Visibility.Collapsed;
            this.btnBusca.IsEnabled = true;

            textDataMovimento.IsEnabled = false;
            textDataPregao.IsEnabled = true;
            comboBolsaMovimento.IsEnabled = true;
            comboBolsaMovimento.SelectedIndex = -1;

            groupNatureza.IsEnabled = true;
            textNNegocio.IsEnabled = true;
            textNNegocioDigito.IsEnabled = true;
            comboMercado.IsEnabled = true;
            comboMercado.SelectedIndex = -1;

            textPapelCodigo.IsEnabled = true;
            textVenctoOpcoes.IsEnabled = true;

            textPrazoTermo.IsEnabled = true;

            HabilitarEdicaoTipoTermo(true);

            HabilitarEdicaoTipoEstrategia(true);

            HabilitarEdicaoTipoOfertaBovespa(true);

            _negocio = null;
            ListaNegocios = null;
            _indexadorNegocio = -1;

            radiohome.IsEnabled = false;
            radioVivaVoz.IsEnabled = false;

            _tituloRecuperado = null;
        }

        private void AtualizarCamposObrigatorios()
        {
            this.labelBolsaMovimento.UpdateLayout();
            this.labelNNegocio.UpdateLayout();
            this.labelVenctoOpcoes.UpdateLayout();
            this.labelQuantidade.UpdateLayout();
            this.labelPreco.UpdateLayout();
            this.labelContraparte.UpdateLayout();
            this.labelPapelObjeto.UpdateLayout();
        }


        #endregion

        #region HabilitarEdicaoTipoTermo
        private void HabilitarEdicaoTipoTermo(bool isEnabled)
        {
            HabilitarEdicaoTipoTermo(isEnabled, isEnabled, isEnabled);

            if (!IsEnabled)
                LimparEdicaoTipoTermo();
        }
        #endregion

        #region LimparEdicaoTipoTermo
        private void LimparEdicaoTipoTermo()
        {
            radioVontadeComprador.IsChecked = false;
            radioVontadeVendedor.IsChecked = false;
            radioAcordoMutuo.IsChecked = false;
        }
        #endregion

        #region HabilitarEdicaoTipoTermo
        private void HabilitarEdicaoTipoTermo(bool isVontadeCompradorEnabled, bool isVontadeVendedorEnabled,
            bool isAcordoMutuoEnabled)
        {
            if (_modoExibicao == ModoExibicao.Form)
            {
                Sinacor.UI.Bovespa.Ordens.Model.Mercado mercado = new Model.Mercado();
                if (this.comboMercado.SelectedItem != null)
                {
                    mercado.TipoMercado = CarregarEnumTipoMercado();

                    if (mercado.TipoMercado.Value == Model.Enum.TipoMercado.Termo)
                    {
                        this.groupTipoTermo.IsEnabled = isVontadeCompradorEnabled || isVontadeVendedorEnabled || isAcordoMutuoEnabled;
                        this.radioVontadeComprador.IsEnabled = isVontadeCompradorEnabled;
                        this.radioVontadeVendedor.IsEnabled = isVontadeVendedorEnabled;
                        this.radioAcordoMutuo.IsEnabled = isAcordoMutuoEnabled;
                    }
                }
                else
                {
                    this.groupTipoTermo.IsEnabled = false;
                    this.radioVontadeComprador.IsEnabled = false;
                    this.radioVontadeVendedor.IsEnabled = false;
                    this.radioAcordoMutuo.IsEnabled = false;
                }
            }
        }
        #endregion

        #region HabilitarEdicaoTipoOfertaBovespa
        private void HabilitarEdicaoTipoOfertaBovespa(bool isEnabled)
        {
            HabilitarEdicaoTipoOfertaBovespa(isEnabled, isEnabled, isEnabled, isEnabled);

            if (!IsEnabled)
            {
                if (_estadoTela != EstadosTela.Alteracao)
                    LimparEdicaoTipoOfertaBovespa();
            }

        }
        #endregion

        #region HabilitarEdicaoTipoOfertaBovespa
        private void HabilitarEdicaoTipoOfertaBovespa(bool isAgressorLancadorEnabled, bool isBalcaoEnabled,
            bool isDiretoEnabled, bool isTomadorEnabled)
        {

            if (_modoExibicao == ModoExibicao.Form)
            {
                groupTipoOfertaBovespa.IsEnabled = isAgressorLancadorEnabled || isBalcaoEnabled || isDiretoEnabled || isTomadorEnabled;
                radioAgressorLancador.IsEnabled = isAgressorLancadorEnabled;
                radioBalcao.IsEnabled = isBalcaoEnabled;
                radioDireto.IsEnabled = isDiretoEnabled;
                radioTomador.IsEnabled = isTomadorEnabled;
            }
        }
        #endregion

        #region LimparEdicaoTipoOfertaBovespa
        private void LimparEdicaoTipoOfertaBovespa()
        {
            radioAgressorLancador.IsChecked = false;
            radioBalcao.IsChecked = false;
            radioDireto.IsChecked = false;
            radioTomador.IsChecked = false;
        }
        #endregion

        #region HabilitarEdicaoTipoEstrategia
        private void HabilitarEdicaoTipoEstrategia(bool isEnabled)
        {

            HabilitarEdicaoTipoEstrategia(isEnabled, isEnabled, isEnabled, isEnabled, isEnabled, isEnabled);

            if (!IsEnabled)
            {
                if (_estadoTela != EstadosTela.Alteracao)
                    LimparEdicaoTipoEstrategia();
            }
        }
        #endregion

        #region HabilitarEdicaoTipoEstrategia
        private void HabilitarEdicaoTipoEstrategia(bool isBoxEnabled, bool isPopEnabled, bool isDesmacheEnabled, bool isNenhumEnabled, bool isBTFEnabled, bool isTVREnabled)
        {

            if (_modoExibicao == ModoExibicao.Form)
            {
                groupTipoEstrategia.IsEnabled = isBoxEnabled || isPopEnabled || isDesmacheEnabled || isNenhumEnabled || isBTFEnabled || isTVREnabled;
                radioBox.IsEnabled = isBoxEnabled;
                radioPOP.IsEnabled = isPopEnabled;
                radioDesmanche.IsEnabled = isDesmacheEnabled;
                radioNenhuma.IsEnabled = isNenhumEnabled;                
                radioBTF.IsEnabled = isBTFEnabled;
                radioTVR.IsEnabled = isTVREnabled;

                radioNenhuma.IsChecked = (!isBoxEnabled && !isPopEnabled && !isDesmacheEnabled && isNenhumEnabled) ? true : false;

            }
        }
        #endregion

        #region LimparEdicaoTipoEstrategia
        private void LimparEdicaoTipoEstrategia()
        {
            radioBox.IsChecked = false;
            radioPOP.IsChecked = false;
            radioDesmanche.IsChecked = false;
            radioNenhuma.IsChecked = false;
            radioBTF.IsChecked = false;
            radioTVR.IsChecked = false;
        }
        #endregion

        #region Selecionar Linha
        private void SelecionarLinha(int linha)
        {
            if (_modoExibicao == ModoExibicao.Form)
                SelecionarLinhaForm(linha);
            else if (_modoExibicao == ModoExibicao.Grid)
                SelecionarLinhaGrid(linha);
        }
        #endregion

        #region Selecionar Linha Grid
        private void SelecionarLinhaGrid(int linha)
        {
            int count = ListaNegocios.Count;

            if (count > 0 && linha < count && linha >= 0)
            {
                this._indexadorNegocio = linha;

                if (linha == (count - 1))
                    dtgDados.SelectLastItem();
                else if (linha == 0)
                    dtgDados.SelectLastItem();
                else
                    dtgDados.SelectedIndex = linha;
            }
        }
        #endregion

        #region Selecionar Linha Form
        private void SelecionarLinhaForm(int linha)
        {
            int count = ListaNegocios.Count;

            if (count > 0 && linha < count && linha >= 0)
            {
                this._indexadorNegocio = linha;
                this.ExibirDadosNegocio(this.ListaNegocios[this._indexadorNegocio]);
            }
            else
            {
                LimparCamposTela(sinacorExpander.Content);

            }
        }
        #endregion

        #region Pre Navegar
        private bool RealizarVerificacoesPreNavegacao(ModelCadastroNegocio _negocioTemp)
        {
            if (this.ListaNegocios.Count == 0)
                return false;

            RecuperarDadosFormulario();




            if (_estadoTela == EstadosTela.Alteracao)
            {
                bool questionar = false;
                if (ListaNegocios.Count > 0)
                {
                    if (!this._negocio.TipoEstrategia.HasValue)
                        this._negocio.TipoEstrategia = TipoEstrategia.Nenhuma;

                    if (!_negocioTemp.TipoEstrategia.HasValue)
                        _negocioTemp.TipoEstrategia = TipoEstrategia.Nenhuma;


                    if (!this._presenter.CompararNegocios(this._negocio, _negocioTemp, true))
                        questionar = true;
                }
                if (questionar)
                {
                    SinacorMessageBoxResult result;

                    result = SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar"), "", SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question);

                    if (result == SinacorMessageBoxResult.Yes)
                    {
                        if (!this.Salvar())
                            return false;
                    }
                    else if (result == SinacorMessageBoxResult.No)
                    {
                        _negocio = null;
                        return false;
                    }
                }
            }
            else if (_estadoTela == EstadosTela.Inclusao)
            {
                if (!this._presenter.CompararNegocios(this._negocio, new ModelCadastroNegocio(), true))
                {
                    SinacorMessageBoxResult result;
                    result = SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_NEG_SalvarAntesContinuar"), "", SinacorMessageBoxButton.YesNoCancel, SinacorMessageBoxImage.Question);
                    if (result == SinacorMessageBoxResult.Yes)
                    {
                        if (!this.Salvar())
                            return false;
                    }
                    else if (result == SinacorMessageBoxResult.Cancel)
                    {
                        return false;
                    }
                }
            }
            return true;
        }

        #endregion

        #endregion

        #region Métodos Públicos

        #region CarregarParametros

        public void CarregarParametros(ModelCadastroNegocio model)
        {
            this._negocio = model;
        }

        #endregion

        #region Carregar Dados Iniciais
        public void CarregarDadosIniciais()
        {
            this.ShowUserWaitingProcess();
            this._presenter.CarregarNomeOperador();
            this._presenter.CarregarMercado();
            this._presenter.CarregarBolsa();
            this.CarregarTipoOrigem();
            if (_negocio != null)
            {
                this._presenter.CarregarNegocios(_negocio);
            }
            this.HideUserWaitingProcess();
        }
        #endregion

        #region Exibir Bolsa
        public void ExibirBolsas(List<Model.Bolsa> bolsa)
        {
            this.comboBolsaMovimento.DisplayMemberPath = "Descricao";
            this.comboBolsaMovimento.SelectedValuePath = "Codigo";
            this.comboBolsaMovimento.ItemsSource = bolsa;
            this.comboBolsaMovimento.SelectedIndex = -1;
        }

        #endregion

        #region Exibir Dados Negocio

        public void ExibirDadosNegocio(List<ModelCadastroNegocio> modelList)
        {
            this.ListaNegocios = modelList;
            this._indexadorNegocio = 0;
            if (modelList != null && modelList.Count > 0)
            {
                this._negocio = modelList[0];
                ExibirDadosNegocio(modelList[0]);
                navigatorPadrao.ItemsSource = this.ListaNegocios;
                navigatorPadrao.UpdateTarget(SinacorNavigator.ItemsSourceProperty);
            }
        }
        int _iIndex;

        public int IIndex
        {
            get { return _iIndex; }
            set { _iIndex = value; }
        }

        void navigatorPadrao_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            this.ClearServiceErrors();

            ModelCadastroNegocio _negocioTemp = null;

            if (_modoExibicao == ModoExibicao.Form && (!_desabilitarControleNavegacao))
            {

                if (this._negocio != null)
                {
                    _negocioTemp = _negocio;

                    if (RealizarVerificacoesPreNavegacao(_negocioTemp))
                    {
                        IIndex = navigatorPadrao.SelectedIndex;
                        ConfigurarTelaModoAlteracao();
                        _negocio = null;
                    }
                }
                else
                {
                    if (navigatorPadrao.SelectedIndex > -1)
                    {
                        this._negocio = (ModelCadastroNegocio)navigatorPadrao.SelectedItem;
                        this.ExibirDadosNegocio(((ModelCadastroNegocio)navigatorPadrao.SelectedItem));
                    }
                }

                ConfigurarControlesPorTitulo(_titulo);

            }



        }

        public void ExibirDadosNegocio(ModelCadastroNegocio negocio)
        {
            LimparCamposTela(sinacorExpander.Content);
            if (negocio != null)
            {
                ConfigurarControlesMercadoBolsa(negocio.Bolsa, negocio.Mercado.Value);

                _titulo = new Model.Titulo();
                _titulo.Codigo = negocio.TituloCodigo;
                _titulo.DataPregao = negocio.DataPregao;
                _titulo.Mercado = negocio.Mercado.Value;
                _titulo.Especificacao = negocio.TituloEspecificacao;
                _titulo.DiasLiquidacao = negocio.DiasLiquidacao;
                _titulo.Descricao = negocio.TituloDescricao;

                if (_estadoTela == EstadosTela.Inclusao)
                {
                    RecuperarDetalhesTitulo(_titulo);
                }
                else
                {
                    textPapelEspecificacao.Text = negocio.TituloEspecificacao;
                    textPapelDescricao.Text = negocio.TituloDescricao;
                }
                textDataMovimento.Text = negocio.DataMovimento.HasValue ? negocio.DataMovimento.Value.ToShortDateString() : string.Empty;
                comboBolsaMovimento.SelectedValue = negocio.Bolsa;

                if (negocio.DataPregao.HasValue)
                    textDataPregao.Value = negocio.DataPregao;
                else
                    textDataPregao.Value = null;

                textPapelCodigo.Text = negocio.TituloCodigo;

                if (negocio.HoraNegocio.HasValue)
                {
                    textHoraNegocio.Value = Convert.ToDateTime(negocio.HoraNegocio);
                }
                else
                {
                    textHoraNegocio.Value = null;
                }

                if (negocio.TipoNaturezaOperacao == Model.Enum.TipoNaturezaOperacao.Compra)
                {
                    radioCompra.IsChecked = true;
                }
                if (negocio.TipoNaturezaOperacao == Model.Enum.TipoNaturezaOperacao.Venda)
                {
                    radioVenda.IsChecked = true;
                }

                if (negocio.Numero.HasValue)
                    textNNegocio.Text = Convert.ToString(negocio.Numero);

                if (negocio.NumeroDigito.HasValue)
                    textNNegocioDigito.Text = Convert.ToString(negocio.NumeroDigito);

                if (negocio.ContraParte.HasValue)
                    textContraparte.Text = Convert.ToString(negocio.ContraParte);

                if (negocio.Mercado != null)
                {
                    for (int i = 0; comboMercado.Items.Count > i; i++)
                    {

                        if ((EnumWrapper<Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado>)comboMercado.Items[i] == negocio.Mercado)
                        {
                            comboMercado.SelectedIndex = i;
                            break;
                        }
                    }
                }
                else
                {
                    comboMercado.SelectedValue = null;
                }
                if (negocio.TipoTermo == TipoTermo.AcordoMutuo)
                {
                    HabilitarEdicaoTipoTermo(true);
                    radioAcordoMutuo.IsChecked = true;
                }
                else if (negocio.TipoTermo == TipoTermo.VontadeComprador)
                {
                    HabilitarEdicaoTipoTermo(true);
                    radioVontadeComprador.IsChecked = true;
                }
                else if (negocio.TipoTermo == TipoTermo.VontadeVendedor)
                {
                    HabilitarEdicaoTipoTermo(true);
                    radioVontadeVendedor.IsChecked = true;
                }
                else
                {
                    HabilitarEdicaoTipoTermo(false);
                }

                if (negocio.FatorCotacao > 0)
                    textPapelFatorValorizacao.Text = Convert.ToString(negocio.FatorCotacao);
                else
                    textPapelFatorValorizacao.Text = String.Empty;

                textPrazoTermo.Text = Convert.ToString(negocio.PrazoTermo);

                if (negocio.VencimentoTermoOpcoes.HasValue)
                    textVenctoOpcoes.Value = negocio.VencimentoTermoOpcoes;
                else
                    textVenctoOpcoes.Value = null;

                if (!String.IsNullOrEmpty(negocio.TituloObjeto))
                    textPapelObjeto.Text = negocio.TituloObjeto;
                else
                    textPapelObjeto.Text = string.Empty;

                textQuantidade.Text = Convert.ToString(negocio.Quantidade);
                textPreco.Text = Convert.ToString(negocio.Preco);

                if (negocio.NaoLiquidaNota == true)
                {
                    checkLiquidada.IsChecked = true;
                }
                if (negocio.PontaGeradoraOferta == true)
                {
                    checkPontoGeradora.IsChecked = true;
                }
                if (negocio.NegociadoAfterMarket == true)
                {
                    checkAfter.IsChecked = true;
                }

                if (!String.IsNullOrEmpty(negocio.Observacao))
                    textObservacao.Text = negocio.Observacao;
                else
                    textObservacao.Text = string.Empty;

                if (negocio.CodigoCorrespondente.HasValue)
                    textCorrespondenteCodigo.Text = Convert.ToString(negocio.CodigoCorrespondente);

                if (negocio.PercentualCorrespondente.HasValue)
                    textCorrespondentePercentual.Text = Convert.ToString(negocio.PercentualCorrespondente);

                if (negocio.TipoOrigem == TipoOrigemNegocio.MegaBolsa)
                {
                    radioMega.IsChecked = true;
                }
                if (negocio.TipoOrigem == TipoOrigemNegocio.HomeBroker)
                {
                    radiohome.IsChecked = true;
                }
                if (negocio.TipoOrigem == TipoOrigemNegocio.VivaVoz)
                {
                    radioVivaVoz.IsChecked = true;
                }

                if (negocio.TipoLiquidacaoNegocio == TipoLiquidacaoNegocio.LiquidacaoPeloBruto)
                {
                    radioLiquidacaoBruto.IsChecked = true;
                }
                if (negocio.TipoLiquidacaoNegocio == TipoLiquidacaoNegocio.LiquidacaoPeloLiquido)
                {
                    radioLiquidacaoLiquido.IsChecked = true;
                }
                if (negocio.DiasLiquidacao.HasValue)
                {
                    textPapelLiquidacao.Text = Convert.ToString(negocio.DiasLiquidacao);
                }
                if (negocio.TipoOfertaBovespaFix == TipoOfertaBovespaFix.AgressorLancador)
                {
                    radioAgressorLancador.IsChecked = true;
                }
                if (negocio.TipoOfertaBovespaFix == TipoOfertaBovespaFix.Balcao)
                {
                    radioBalcao.IsChecked = true;
                }
                if (negocio.TipoOfertaBovespaFix == TipoOfertaBovespaFix.Direto)
                {
                    radioDireto.IsChecked = true;
                }
                if (negocio.TipoOfertaBovespaFix == TipoOfertaBovespaFix.Tomador)
                {
                    radioTomador.IsChecked = true;
                }

                ExibirDadosEstrategiaNegocio(negocio);


                ConfigurarControlesPorTitulo(_titulo);
            }
        }

        private void ExibirDadosEstrategiaNegocio(ModelCadastroNegocio negocio)
        {
            if (negocio.TipoEstrategia == TipoEstrategia.BOX)
            {
                radioBox.IsChecked = true;
            }
            if (negocio.TipoEstrategia == TipoEstrategia.DBX)
            {
                radioDesmanche.IsChecked = true;
            }
            if (negocio.TipoEstrategia == TipoEstrategia.Nenhuma)
            {
                radioNenhuma.IsChecked = true;
            }
            if (negocio.TipoEstrategia == TipoEstrategia.POP)
            {
                radioPOP.IsChecked = true;
            }
            if (negocio.TipoEstrategia == TipoEstrategia.BTF)
            {
                radioBTF.IsChecked = true;
            }

            //Estrategia TVR
            if (negocio.TipoEstrategia == TipoEstrategia.TVR)
            {
                 radioTVR.IsChecked = true;
            }
        }

        #endregion

        #region Exibir Data Pregão

        public void ExibirDataPregao(DateTime dataPregao)
        {
            //textDataMovimento.Text = dataMovimento.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern);
            textDataPregao.Value = Convert.ToDateTime(dataPregao.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));
        }

        #endregion

        #region Exibir Data Movimento

        public void ExibirDataMovimento(DateTime dataMovimento)
        {
            textDataMovimento.Text = dataMovimento.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern);
        }

        #endregion

        #region Exibir Mercado

        public void ExibirMercado(IEnumerable mercadoList)
        {
            List<string> enumNamesMercadoList = new List<string>();
            int selectedIndex = -1;

            if (mercadoList != null)
            {
                int idx = -1;

                foreach (Model.Mercado mercado in mercadoList)
                {
                    idx++;

                    enumNamesMercadoList.Add(Enum.GetName(typeof(Bovespa.Ordens.Model.Enum.TipoMercado), mercado.TipoMercado));
                    if (_titulo.Mercado != null && _titulo.Mercado.Value == mercado.TipoMercado.Value)
                        selectedIndex = idx;
                }
            }
            this.comboMercado.ItemsSource = EnumWrapper<Bovespa.Ordens.Model.Enum.TipoMercado>.GetEnums();
            this.comboMercado.SelectedIndex = selectedIndex;
        }

        #endregion

        #region Exibir Mensagem By ResourceKey

        public void ExibirMensagemByResourseKey(string resourceKey, SinacorMessageBoxImage type)
        {
            string message = Convert.ToString(this.TryFindResource(resourceKey));

            if (!String.IsNullOrEmpty(message))
                SinacorMessageBox.Show(message, type);
        }
        #endregion

        #region Exibir Mensagem

        public void ExibirMensagem(string message)
        {
            if (!String.IsNullOrEmpty(message))
                SinacorMessageBox.Show(message);
        }

        #endregion

        #region Limpar Campos Tela
        public void LimparCamposTela(object objetoLimpar)
        {
            textContraparte.Text = "";
            textCorrespondenteCodigo.Text = "";
            textCorrespondentePercentual.Text = "";
            textDataMovimento.Text = "";
            textNNegocio.Text = "";
            textNNegocioDigito.Text = "";
            textObservacao.Text = "";
            textPapelCodigo.Text = "";
            textPapelDescricao.Text = "";
            textPapelEspecificacao.Text = "";
            textPapelFatorValorizacao.Text = "";
            textPapelLiquidacao.Text = "";
            textPapelObjeto.Text = "";
            textPrazoTermo.Text = "";
            textPreco.Text = "";
            textQuantidade.Text = "";

            if (textHoraNegocio.Value != null)
                textHoraNegocio.Value = null;

            if (textDataPregao.Value != null)
                textDataPregao.Value = null;

            if (textVenctoOpcoes.Value != null)
                textVenctoOpcoes.Value = null;

            radioAcordoMutuo.IsChecked = false;
            radioAgressorLancador.IsChecked = false;
            radioBalcao.IsChecked = false;
            radioBox.IsChecked = false;
            radioBTF.IsChecked = false;
            radioTVR.IsChecked = false;
            radioCompra.IsChecked = false;
            radioDesmanche.IsChecked = false;
            radioDireto.IsChecked = false;
            radiohome.IsChecked = false;
            radioLiquidacaoBruto.IsChecked = false;
            radioLiquidacaoLiquido.IsChecked = false;
            radioMega.IsChecked = false;
            radioNenhuma.IsChecked = false;
            radioPOP.IsChecked = false;
            radioTomador.IsChecked = false;
            radioVenda.IsChecked = false;
            radioVivaVoz.IsChecked = false;
            radioVontadeComprador.IsChecked = false;
            radioVontadeVendedor.IsChecked = false;

            comboBolsaMovimento.SelectedIndex = -1;
            comboMercado.SelectedIndex = -1;
            checkLiquidada.IsChecked = false;
            checkPontoGeradora.IsChecked = false;
            checkAfter.IsChecked = false;



        }
        #endregion

        #region Informar Negocio Excluido
        public void InformarNegocioExcluido(ModelCadastroNegocio negocio)
        {
            int position = navigatorPadrao.Position;
            _desabilitarControleNavegacao = true;
            navigatorPadrao.ItemsSource = null;

            if (navigatorPadrao.Position >= 0)
            {
                ListaNegocios.RemoveAt(position - 1);
                navigatorPadrao.ItemsSource = ListaNegocios;
                navigatorPadrao.UpdateTarget(SinacorNavigator.ItemsSourceProperty);
            }
            if (this.ListaNegocios.Count > 0)
            {
                navigatorPadrao.ItemsSource = ListaNegocios;
                this.ConfigurarTelaModoAlteracao();
                this._negocio = ListaNegocios[0];
                ExibirDadosNegocio(this._negocio);
                navigatorPadrao.SelectedItem = this._negocio;
            }
            else
            {
                this._negocio = null;
                this.ConfigurarTelaModoPesquisa();
            }
            _desabilitarControleNavegacao = false;
            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_negocioExcluidoSucesso", SinacorMessageBoxImage.Information);
        }

        #endregion

        #region Informar Negocio Incluido
        public void InformarNegocioIncluido(ModelCadastroNegocio negocio)
        {
            this._negocio = negocio;
            ConfigurarTelaModoAlteracao();
            ExibirDadosNegocio(negocio);
            this.ListaNegocios.Add(negocio);
            this._desabilitarControleNavegacao = true;
            //this.navigatorPadrao.ItemsSource = this.ListaNegocios;

            this.navigatorPadrao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            //this.navigatorPadrao.SelectedItem = negocio;
            this.navigatorPadrao.SelectedIndex = IIndex;
            this._desabilitarControleNavegacao = false;
            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_negocioIncluidoSucesso", SinacorMessageBoxImage.Information);
        }
        #endregion

        #region Informar Negocio Alterado
        public void InformarNegocioAlterado(ModelCadastroNegocio negocio)
        {
            this._negocio = negocio;

            if (navigatorPadrao.SelectedIndex >= 0)
            {
                this.ListaNegocios[IIndex] = negocio;
                navigatorPadrao.UpdateTarget(SinacorNavigator.ItemsSourceProperty);
                //navigatorPadrao.Items[navigatorPadrao.SelectedIndex - 1] = negocio;
            }

            //ConfigurarTelaModoAlteracao();
            ExibirDadosNegocio(negocio);
            //navigatorPadrao.ItemsSource = this.ListaNegocios;
            //navigatorPadrao.SelectedItem = negocio;

            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_negocioAlteradoSucesso", SinacorMessageBoxImage.Information);
        }

        #endregion

        #region Informar Pesquisa Sem Resultado
        public void InformarPesquisaSemResultado()
        {
            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_nenhumNegocioEncontrado", SinacorMessageBoxImage.Exclamation);
        }
        #endregion

        #region Informar Pesquisa Sem Resultado
        public void InformarTituloNaoEncontrado()
        {
            this.ExibirTitulo(null);
            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_tituloNaoEncontrado", SinacorMessageBoxImage.Exclamation);
        }
        #endregion

        #region InformarNenhumaBolsaEncontra
        public void InformarNenhumaBolsaEncontra()
        {
            this.ExibirMensagemByResourseKey("MessageBox_NEG_bolsasNaoEncontradas", SinacorMessageBoxImage.Exclamation);
        }
        #endregion

        #region ExibirNomeOperador
        public void ExibirNomeOperador(string nomeOperador)
        { }
        #endregion

        #region InformarFiltroNaoInformado
        public void InformarFiltroNaoInformado()
        {
            this.ExibirMensagemByResourseKey("MessageBox_NEG_FiltroNaoInformado", SinacorMessageBoxImage.Exclamation);
            this.HideUserWaitingProcess();
        }
        #endregion

        #region ExibirCorrespondente
        public void ExibirCorrespondente(Sinacor.UI.Bovespa.Clientes.Model.Correspondente dadosCorrespondente)
        {
            if (dadosCorrespondente != null)
            {
                if (dadosCorrespondente.Codigo.HasValue)
                    this.textCorrespondenteCodigo.Text = Convert.ToString(dadosCorrespondente.Codigo.Value);

                if (dadosCorrespondente.PercentualComissao.HasValue)
                    this.textCorrespondentePercentual.Text = Convert.ToString(dadosCorrespondente.PercentualComissao.Value);
            }
            else
            {
                this.textCorrespondenteCodigo.Clear();
                this.textCorrespondentePercentual.Clear();
            }
        }
        #endregion

        #region InformarCorrespondenteNaoEncontrado
        public void InformarCorrespondenteNaoEncontrado()
        {
            this.ExibirMensagemByResourseKey("Bovespa.Ordens.Message.MessageBox_NEG_CorrespondenteNaoEncontrado", SinacorMessageBoxImage.Exclamation);
        }
        #endregion

        #region FecharJanela
        public void FecharJanela()
        {
            this.Close();
        }
        #endregion

        private void SinacorContextMenu_Opened(object sender, RoutedEventArgs e)
        {


            if (this._estadoTela == EstadosTela.Inclusao || this._estadoTela == EstadosTela.Alteracao)
            {


                ModelCadastroNegocio _negocioTemp = this._negocio;

                RecuperarDadosFormulario();

                if (navigatorPadrao.SelectedItem != null)
                {
                    this.btnSalvar.IsEnabled = !this._presenter.CompararNegocios(this._negocio, (ModelCadastroNegocio)navigatorPadrao.SelectedItem, true);
                    IIndex = navigatorPadrao.SelectedIndex;
                }
                else
                    this.btnSalvar.IsEnabled = true;


                this._negocio = _negocioTemp;
            }
        }

        #endregion

    }
}
